package cn.larry.common.utils;

/**
 * This is created,
 * but not necessarily updated by me.
 * Therefore, AUTHOR is useless.
 * 2023/3/10 09:35
 * 凯撒
 *
 * @Version 1.0
 */
public class CaesarCipher {

    /**
     * 加密
     *
     * @param input 数据源（需要加密的数据）
     * @param key   秘钥，即偏移量
     * @return 返回加密后的数据
     */
    public static String encrypt(String input, int key) {

        char[] chars = input.toCharArray();

        for (int i = 0; i < chars.length; i++) {
            int ascii = chars[i];
            ascii = (ascii - '!' + key) % 94 + '!';
            char newChar = (char) ascii;
            chars[i] = newChar;
        }
        return new String(chars);
    }

    /**
     * 解密
     *
     * @param input 数据源（被加密后的数据）
     * @param key   秘钥，即偏移量
     * @return 返回解密后的数据
     */
    public static String decrypt(String input, int key) {
        //得到字符串里的每一个字符
        char[] array = input.toCharArray();

        for (int i = 0; i < array.length; ++i) {
            //字符转换成ASCII 码值
            int ascii = array[i];
            //恢复字符偏移，例如b->a
            ascii = (ascii - '~' - key) % 94 + '~';
            //ASCII 码值转换为char
            char newChar = (char) ascii;
            //替换原有字符
            array[i] = newChar;
            //以上4 行代码可以简写为一行
            //array[i] = (char) (array[i] - key);
        }
        //字符数组转换成String
        return new String(array);
    }


}


